package hot

import (
	"math"
)

/*
*
原题链接:
https://leetcode.cn/problems/shortest-unsorted-continuous-subarray/

581. 最短无序连续子数组
给你一个整数数组 nums ，你需要找出一个 连续子数组 ，
如果对这个子数组进行升序排序，那么整个数组都会变为升序排序。

请你找出符合题意的 最短 子数组，并输出它的长度。

示例 1：
输入：nums = [2,6,4,8,10,9,15]
输出：5
解释：你只需要对 [6, 4, 8, 10, 9] 进行升序排序，那么整个表都会变为升序排序。

示例 2：
输入：nums = [1,2,3,4]
输出：0

示例 3：
输入：nums = [1]
输出：0
*/
func findUnsortedSubarray(nums []int) int {
	//1.获取数组长度
	n := len(nums)

	//2.声明最小值,最大值
	minVal, maxVal := math.MaxInt64, math.MinInt64

	//3.声明左右指针
	left, right := -1, -1

	//4.遍历参数数组
	for index, curVal := range nums {

		if maxVal > curVal {
			right = index
		} else {
			maxVal = curVal
		}

		if minVal < nums[n-1-index] {
			left = n - 1 - index
		} else {
			minVal = nums[n-1-index]
		}
	}

	if right == -1 {
		return 0
	}

	return right - left + 1
}
